#ifndef EXPRESSIONLEXER_H
#define EXPRESSIONLEXER_H

#include <vector>
#include "..\Common\stdafx.h"
#include "Common\ExpressionToken.h"
#include "..\Common\WrapperPtr.h"
#include "Common\ParseContext.h"

namespace CExpression
{
class ExpressionLexer
{
public:
	ExpressionLexer():currentTokenStartIndex(0),nextTokenStartIndex(0),currentRow(0),currentColumn(0){}
	ParseContext::TokenCollectionPtr ParseTokens(const ExpressionString &str);
private:
	bool MoveToNextToken(const ExpressionString &str);
	void SkipSpace(const ExpressionString &str);
	ExpressionString::size_type currentTokenStartIndex;
	ExpressionString::size_type nextTokenStartIndex;
	ExpressionString::size_type currentRow;
	ExpressionString::size_type currentColumn;
};
}

#endif